package tool;

import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierTool {
    //现在有这么一个需求，现在要集齐小当家108张梁山好汉可以兑换小霸王学习机
    //
    //	【可以让一批线程之间相互等待，等到某一个临界值的时候，再同时往下执行！】
    //CyclicBarrier：加法计数器，循环栅栏
    //例如：游戏：集齐7颗龙珠，才能召唤神龙
    public static void main(String[] args) {
        CyclicBarrier cb = new CyclicBarrier(108, new Runnable() {
            @Override
            public void run() {
                System.out.println("集齐了108张梁山好汉，可以领取小霸王学习机");
            }
        });

        for (int i = 1; i <= 108; i++) {
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + "位好汉");
                // 每个线程执行完毕，计数器加1
                try {
                    cb.await();//等待，当计数器归0时，await()方法会继续往下执行
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }, "第" + i).start();
        }
    }
}
